<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/Python-3.6.2/Include/pytime.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/Python-3.6.2/Include/pytime.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="macros_noref.html#_UHlfUFlUSU1FX0hfMA__"><span class="b">Py_PYTIME_H</span></a>
<a name="3" /><span class="True">       3:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfUFlUSU1FX0hfMA__"><span class="b">Py_PYTIME_H</span></a>
<a name="4" /><span class="True">       4:</span> 
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">include</span> <span class="e">&quot;pyconfig.h&quot;</span> <span class="k">/* include for defines */</span>
<a name="6" /><span class="True">       6:</span> <span class="f">#</span><span class="n">include</span> <span class="e">&quot;object.h&quot;</span>
<a name="7" /><span class="True">       7:</span> 
<a name="8" /><span class="True">       8:</span> <span class="k">/**************************************************************************</span>
<a name="9" /><span class="True">       9:</span> <span class="k">Symbols and macros to supply platform-independent interfaces to time related</span>
<a name="10" /><span class="True">      10:</span> <span class="k">functions and constants</span>
<a name="11" /><span class="True">      11:</span> <span class="k">**************************************************************************/</span>
<a name="12" /><span class="False">      12:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="13" /><span class="False">      13:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="14" /><span class="True">      14:</span> <span class="f">#</span><span class="n">endif</span>
<a name="15" /><span class="True">      15:</span> 
<a name="16" /><span class="True">      16:</span> <span class="k">/* _PyTime_t: Python timestamp with subsecond precision. It can be used to</span>
<a name="17" /><span class="True">      17:</span> <span class="k">   store a duration, and so indirectly a date (related to another date, like</span>
<a name="18" /><span class="True">      18:</span> <span class="k">   UNIX epoch). */</span>
<a name="19" /><span class="True">      19:</span> <span class="m">typedef</span> <span class="b">int64_t</span> <span class="b">_PyTime_t</span><span class="f">;</span>
<a name="20" /><span class="True">      20:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_X1B5VGltZV9NSU5fMA__"><span class="b">_PyTime_MIN</span></a> <a href="macros_noref.html#_UFlfTExPTkdfTUlOXzA_"><span class="b">PY_LLONG_MIN</span></a>
<a name="21" /><span class="True">      21:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_X1B5VGltZV9NQVhfMA__"><span class="b">_PyTime_MAX</span></a> <a href="macros_noref.html#_UFlfTExPTkdfTUFYXzA_"><span class="b">PY_LLONG_MAX</span></a>
<a name="22" /><span class="True">      22:</span> 
<a name="23" /><span class="True">      23:</span> <span class="m">typedef</span> <span class="m">enum</span> <span class="f">{</span>
<a name="24" /><span class="True">      24:</span>     <span class="k">/* Round towards minus infinity (-inf).</span>
<a name="25" /><span class="True">      25:</span> <span class="k">       For example, used to read a clock. */</span>
<a name="26" /><span class="True">      26:</span>     <span class="b">_PyTime_ROUND_FLOOR</span><span class="f">=</span><span class="c">0</span><span class="f">,</span>
<a name="27" /><span class="True">      27:</span>     <span class="k">/* Round towards infinity (+inf).</span>
<a name="28" /><span class="True">      28:</span> <span class="k">       For example, used for timeout to wait &quot;at least&quot; N seconds. */</span>
<a name="29" /><span class="True">      29:</span>     <span class="b">_PyTime_ROUND_CEILING</span><span class="f">=</span><span class="c">1</span><span class="f">,</span>
<a name="30" /><span class="True">      30:</span>     <span class="k">/* Round to nearest with ties going to nearest even integer.</span>
<a name="31" /><span class="True">      31:</span> <span class="k">       For example, used to round from a Python float. */</span>
<a name="32" /><span class="True">      32:</span>     <span class="b">_PyTime_ROUND_HALF_EVEN</span>
<a name="33" /><span class="True">      33:</span> <span class="f">}</span> <span class="b">_PyTime_round_t</span><span class="f">;</span>
<a name="34" /><span class="True">      34:</span> 
<a name="35" /><span class="True">      35:</span> <span class="k">/* Convert a time_t to a PyLong. */</span>
<a name="36" /><span class="True">      36:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyLong_FromTime_t</span><span class="f">(</span>
<a name="37" /><span class="True">      37:</span>     <span class="b">time_t</span> <span class="b">sec</span><span class="f">)</span><span class="f">;</span>
<a name="38" /><span class="True">      38:</span> 
<a name="39" /><span class="True">      39:</span> <span class="k">/* Convert a PyLong to a time_t. */</span>
<a name="40" /><span class="True">      40:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">time_t</span><span class="f">)</span> <span class="b">_PyLong_AsTime_t</span><span class="f">(</span>
<a name="41" /><span class="True">      41:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">obj</span><span class="f">)</span><span class="f">;</span>
<a name="42" /><span class="True">      42:</span> 
<a name="43" /><span class="True">      43:</span> <span class="k">/* Convert a number of seconds, int or float, to time_t. */</span>
<a name="44" /><span class="True">      44:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_ObjectToTime_t</span><span class="f">(</span>
<a name="45" /><span class="True">      45:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">obj</span><span class="f">,</span>
<a name="46" /><span class="True">      46:</span>     <span class="b">time_t</span> <span class="f">*</span><span class="b">sec</span><span class="f">,</span>
<a name="47" /><span class="True">      47:</span>     <span class="b">_PyTime_round_t</span><span class="f">)</span><span class="f">;</span>
<a name="48" /><span class="True">      48:</span> 
<a name="49" /><span class="True">      49:</span> <span class="k">/* Convert a number of seconds, int or float, to a timeval structure.</span>
<a name="50" /><span class="True">      50:</span> <span class="k">   usec is in the range [0; 999999] and rounded towards zero.</span>
<a name="51" /><span class="True">      51:</span> <span class="k">   For example, -1.2 is converted to (-2, 800000). */</span>
<a name="52" /><span class="True">      52:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_ObjectToTimeval</span><span class="f">(</span>
<a name="53" /><span class="True">      53:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">obj</span><span class="f">,</span>
<a name="54" /><span class="True">      54:</span>     <span class="b">time_t</span> <span class="f">*</span><span class="b">sec</span><span class="f">,</span>
<a name="55" /><span class="True">      55:</span>     <span class="m">long</span> <span class="f">*</span><span class="b">usec</span><span class="f">,</span>
<a name="56" /><span class="True">      56:</span>     <span class="b">_PyTime_round_t</span><span class="f">)</span><span class="f">;</span>
<a name="57" /><span class="True">      57:</span> 
<a name="58" /><span class="True">      58:</span> <span class="k">/* Convert a number of seconds, int or float, to a timespec structure.</span>
<a name="59" /><span class="True">      59:</span> <span class="k">   nsec is in the range [0; 999999999] and rounded towards zero.</span>
<a name="60" /><span class="True">      60:</span> <span class="k">   For example, -1.2 is converted to (-2, 800000000). */</span>
<a name="61" /><span class="True">      61:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_ObjectToTimespec</span><span class="f">(</span>
<a name="62" /><span class="True">      62:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">obj</span><span class="f">,</span>
<a name="63" /><span class="True">      63:</span>     <span class="b">time_t</span> <span class="f">*</span><span class="b">sec</span><span class="f">,</span>
<a name="64" /><span class="True">      64:</span>     <span class="m">long</span> <span class="f">*</span><span class="b">nsec</span><span class="f">,</span>
<a name="65" /><span class="True">      65:</span>     <span class="b">_PyTime_round_t</span><span class="f">)</span><span class="f">;</span>
<a name="66" /><span class="True">      66:</span> 
<a name="67" /><span class="True">      67:</span> 
<a name="68" /><span class="True">      68:</span> <span class="k">/* Create a timestamp from a number of seconds. */</span>
<a name="69" /><span class="True">      69:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">_PyTime_t</span><span class="f">)</span> <span class="b">_PyTime_FromSeconds</span><span class="f">(</span><span class="m">int</span> <span class="b">seconds</span><span class="f">)</span><span class="f">;</span>
<a name="70" /><span class="True">      70:</span> 
<a name="71" /><span class="True">      71:</span> <span class="k">/* Macro to create a timestamp from a number of seconds, no integer overflow.</span>
<a name="72" /><span class="True">      72:</span> <span class="k">   Only use the macro for small values, prefer _PyTime_FromSeconds(). */</span>
<a name="73" /><span class="True">      73:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_X1BZVElNRV9GUk9NU0VDT05EU18w"><span class="b">_PYTIME_FROMSECONDS</span></a><span class="f">(</span><span class="b">seconds</span><span class="f">)</span> \
<a name="74" /><span class="True">      74:</span>             <span class="f">(</span><span class="f">(</span><span class="b">_PyTime_t</span><span class="f">)</span><span class="f">(</span><span class="b">seconds</span><span class="f">)</span> <span class="f">*</span> <span class="f">(</span><span class="c">1000</span> <span class="f">*</span> <span class="c">1000</span> <span class="f">*</span> <span class="c">1000</span><span class="f">)</span><span class="f">)</span>
<a name="75" /><span class="True">      75:</span> 
<a name="76" /><span class="True">      76:</span> <span class="k">/* Create a timestamp from a number of nanoseconds. */</span>
<a name="77" /><span class="True">      77:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">_PyTime_t</span><span class="f">)</span> <span class="b">_PyTime_FromNanoseconds</span><span class="f">(</span><span class="m">long</span> <span class="m">long</span> <span class="b">ns</span><span class="f">)</span><span class="f">;</span>
<a name="78" /><span class="True">      78:</span> 
<a name="79" /><span class="True">      79:</span> <span class="k">/* Convert a number of seconds (Python float or int) to a timetamp.</span>
<a name="80" /><span class="True">      80:</span> <span class="k">   Raise an exception and return -1 on error, return 0 on success. */</span>
<a name="81" /><span class="True">      81:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_FromSecondsObject</span><span class="f">(</span><span class="b">_PyTime_t</span> <span class="f">*</span><span class="b">t</span><span class="f">,</span>
<a name="82" /><span class="True">      82:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">obj</span><span class="f">,</span>
<a name="83" /><span class="True">      83:</span>     <span class="b">_PyTime_round_t</span> <span class="b">round</span><span class="f">)</span><span class="f">;</span>
<a name="84" /><span class="True">      84:</span> 
<a name="85" /><span class="True">      85:</span> <span class="k">/* Convert a number of milliseconds (Python float or int, 10^-3) to a timetamp.</span>
<a name="86" /><span class="True">      86:</span> <span class="k">   Raise an exception and return -1 on error, return 0 on success. */</span>
<a name="87" /><span class="True">      87:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_FromMillisecondsObject</span><span class="f">(</span><span class="b">_PyTime_t</span> <span class="f">*</span><span class="b">t</span><span class="f">,</span>
<a name="88" /><span class="True">      88:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">obj</span><span class="f">,</span>
<a name="89" /><span class="True">      89:</span>     <span class="b">_PyTime_round_t</span> <span class="b">round</span><span class="f">)</span><span class="f">;</span>
<a name="90" /><span class="True">      90:</span> 
<a name="91" /><span class="True">      91:</span> <span class="k">/* Convert a timestamp to a number of seconds as a C double. */</span>
<a name="92" /><span class="True">      92:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">double</span><span class="f">)</span> <span class="b">_PyTime_AsSecondsDouble</span><span class="f">(</span><span class="b">_PyTime_t</span> <span class="b">t</span><span class="f">)</span><span class="f">;</span>
<a name="93" /><span class="True">      93:</span> 
<a name="94" /><span class="True">      94:</span> <span class="k">/* Convert timestamp to a number of milliseconds (10^-3 seconds). */</span>
<a name="95" /><span class="True">      95:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">_PyTime_t</span><span class="f">)</span> <span class="b">_PyTime_AsMilliseconds</span><span class="f">(</span><span class="b">_PyTime_t</span> <span class="b">t</span><span class="f">,</span>
<a name="96" /><span class="True">      96:</span>     <span class="b">_PyTime_round_t</span> <span class="b">round</span><span class="f">)</span><span class="f">;</span>
<a name="97" /><span class="True">      97:</span> 
<a name="98" /><span class="True">      98:</span> <span class="k">/* Convert timestamp to a number of microseconds (10^-6 seconds). */</span>
<a name="99" /><span class="True">      99:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">_PyTime_t</span><span class="f">)</span> <span class="b">_PyTime_AsMicroseconds</span><span class="f">(</span><span class="b">_PyTime_t</span> <span class="b">t</span><span class="f">,</span>
<a name="100" /><span class="True">     100:</span>     <span class="b">_PyTime_round_t</span> <span class="b">round</span><span class="f">)</span><span class="f">;</span>
<a name="101" /><span class="True">     101:</span> 
<a name="102" /><span class="True">     102:</span> <span class="k">/* Convert timestamp to a number of nanoseconds (10^-9 seconds) as a Python int</span>
<a name="103" /><span class="True">     103:</span> <span class="k">   object. */</span>
<a name="104" /><span class="True">     104:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyTime_AsNanosecondsObject</span><span class="f">(</span><span class="b">_PyTime_t</span> <span class="b">t</span><span class="f">)</span><span class="f">;</span>
<a name="105" /><span class="True">     105:</span> 
<a name="106" /><span class="True">     106:</span> <span class="k">/* Convert a timestamp to a timeval structure (microsecond resolution).</span>
<a name="107" /><span class="True">     107:</span> <span class="k">   tv_usec is always positive.</span>
<a name="108" /><span class="True">     108:</span> <span class="k">   Raise an exception and return -1 if the conversion overflowed,</span>
<a name="109" /><span class="True">     109:</span> <span class="k">   return 0 on success. */</span>
<a name="110" /><span class="True">     110:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_AsTimeval</span><span class="f">(</span><span class="b">_PyTime_t</span> <span class="b">t</span><span class="f">,</span>
<a name="111" /><span class="True">     111:</span>     <span class="m">struct</span> <span class="b">timeval</span> <span class="f">*</span><span class="b">tv</span><span class="f">,</span>
<a name="112" /><span class="True">     112:</span>     <span class="b">_PyTime_round_t</span> <span class="b">round</span><span class="f">)</span><span class="f">;</span>
<a name="113" /><span class="True">     113:</span> 
<a name="114" /><span class="True">     114:</span> <span class="k">/* Similar to _PyTime_AsTimeval(), but don&apos;t raise an exception on error. */</span>
<a name="115" /><span class="True">     115:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_AsTimeval_noraise</span><span class="f">(</span><span class="b">_PyTime_t</span> <span class="b">t</span><span class="f">,</span>
<a name="116" /><span class="True">     116:</span>     <span class="m">struct</span> <span class="b">timeval</span> <span class="f">*</span><span class="b">tv</span><span class="f">,</span>
<a name="117" /><span class="True">     117:</span>     <span class="b">_PyTime_round_t</span> <span class="b">round</span><span class="f">)</span><span class="f">;</span>
<a name="118" /><span class="True">     118:</span> 
<a name="119" /><span class="True">     119:</span> <span class="k">/* Convert a timestamp to a number of seconds (secs) and microseconds (us).</span>
<a name="120" /><span class="True">     120:</span> <span class="k">   us is always positive. This function is similar to _PyTime_AsTimeval()</span>
<a name="121" /><span class="True">     121:</span> <span class="k">   except that secs is always a time_t type, whereas the timeval structure</span>
<a name="122" /><span class="True">     122:</span> <span class="k">   uses a C long for tv_sec on Windows.</span>
<a name="123" /><span class="True">     123:</span> <span class="k">   Raise an exception and return -1 if the conversion overflowed,</span>
<a name="124" /><span class="True">     124:</span> <span class="k">   return 0 on success. */</span>
<a name="125" /><span class="True">     125:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_AsTimevalTime_t</span><span class="f">(</span>
<a name="126" /><span class="True">     126:</span>     <span class="b">_PyTime_t</span> <span class="b">t</span><span class="f">,</span>
<a name="127" /><span class="True">     127:</span>     <span class="b">time_t</span> <span class="f">*</span><span class="b">secs</span><span class="f">,</span>
<a name="128" /><span class="True">     128:</span>     <span class="m">int</span> <span class="f">*</span><span class="b">us</span><span class="f">,</span>
<a name="129" /><span class="True">     129:</span>     <span class="b">_PyTime_round_t</span> <span class="b">round</span><span class="f">)</span><span class="f">;</span>
<a name="130" /><span class="True">     130:</span> 
<a name="131" /><span class="True">     131:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><span class="b">HAVE_CLOCK_GETTIME</span><span class="f">)</span> <span class="f">||</span> <span class="b">defined</span><span class="f">(</span><a href="macros_ref.html#_SEFWRV9LUVVFVUVfMA__"><span class="b">HAVE_KQUEUE</span></a><span class="f">)</span>
<a name="132" /><span class="True">     132:</span> <span class="k">/* Convert a timestamp to a timespec structure (nanosecond resolution).</span>
<a name="133" /><span class="True">     133:</span> <span class="k">   tv_nsec is always positive.</span>
<a name="134" /><span class="True">     134:</span> <span class="k">   Raise an exception and return -1 on error, return 0 on success. */</span>
<a name="135" /><span class="True">     135:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_AsTimespec</span><span class="f">(</span><span class="b">_PyTime_t</span> <span class="b">t</span><span class="f">,</span> <span class="m">struct</span> <span class="b">timespec</span> <span class="f">*</span><span class="b">ts</span><span class="f">)</span><span class="f">;</span>
<a name="136" /><span class="True">     136:</span> <span class="f">#</span><span class="n">endif</span>
<a name="137" /><span class="True">     137:</span> 
<a name="138" /><span class="True">     138:</span> <span class="k">/* Get the current time from the system clock.</span>
<a name="139" /><span class="True">     139:</span> <span class="k"></span>
<a name="140" /><span class="True">     140:</span> <span class="k">   The function cannot fail. _PyTime_Init() ensures that the system clock</span>
<a name="141" /><span class="True">     141:</span> <span class="k">   works. */</span>
<a name="142" /><span class="True">     142:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">_PyTime_t</span><span class="f">)</span> <span class="b">_PyTime_GetSystemClock</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="143" /><span class="True">     143:</span> 
<a name="144" /><span class="True">     144:</span> <span class="k">/* Get the time of a monotonic clock, i.e. a clock that cannot go backwards.</span>
<a name="145" /><span class="True">     145:</span> <span class="k">   The clock is not affected by system clock updates. The reference point of</span>
<a name="146" /><span class="True">     146:</span> <span class="k">   the returned value is undefined, so that only the difference between the</span>
<a name="147" /><span class="True">     147:</span> <span class="k">   results of consecutive calls is valid.</span>
<a name="148" /><span class="True">     148:</span> <span class="k"></span>
<a name="149" /><span class="True">     149:</span> <span class="k">   The function cannot fail. _PyTime_Init() ensures that a monotonic clock</span>
<a name="150" /><span class="True">     150:</span> <span class="k">   is available and works. */</span>
<a name="151" /><span class="True">     151:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">_PyTime_t</span><span class="f">)</span> <span class="b">_PyTime_GetMonotonicClock</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="152" /><span class="True">     152:</span> 
<a name="153" /><span class="True">     153:</span> 
<a name="154" /><span class="True">     154:</span> <span class="k">/* Structure used by time.get_clock_info() */</span>
<a name="155" /><span class="True">     155:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="156" /><span class="True">     156:</span>     <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">implementation</span><span class="f">;</span>
<a name="157" /><span class="True">     157:</span>     <span class="m">int</span> <span class="b">monotonic</span><span class="f">;</span>
<a name="158" /><span class="True">     158:</span>     <span class="m">int</span> <span class="b">adjustable</span><span class="f">;</span>
<a name="159" /><span class="True">     159:</span>     <span class="m">double</span> <span class="b">resolution</span><span class="f">;</span>
<a name="160" /><span class="True">     160:</span> <span class="f">}</span> <span class="b">_Py_clock_info_t</span><span class="f">;</span>
<a name="161" /><span class="True">     161:</span> 
<a name="162" /><span class="True">     162:</span> <span class="k">/* Get the current time from the system clock.</span>
<a name="163" /><span class="True">     163:</span> <span class="k"> * Fill clock information if info is not NULL.</span>
<a name="164" /><span class="True">     164:</span> <span class="k"> * Raise an exception and return -1 on error, return 0 on success.</span>
<a name="165" /><span class="True">     165:</span> <span class="k"> */</span>
<a name="166" /><span class="True">     166:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_GetSystemClockWithInfo</span><span class="f">(</span>
<a name="167" /><span class="True">     167:</span>     <span class="b">_PyTime_t</span> <span class="f">*</span><span class="b">t</span><span class="f">,</span>
<a name="168" /><span class="True">     168:</span>     <span class="b">_Py_clock_info_t</span> <span class="f">*</span><span class="b">info</span><span class="f">)</span><span class="f">;</span>
<a name="169" /><span class="True">     169:</span> 
<a name="170" /><span class="True">     170:</span> <span class="k">/* Get the time of a monotonic clock, i.e. a clock that cannot go backwards.</span>
<a name="171" /><span class="True">     171:</span> <span class="k">   The clock is not affected by system clock updates. The reference point of</span>
<a name="172" /><span class="True">     172:</span> <span class="k">   the returned value is undefined, so that only the difference between the</span>
<a name="173" /><span class="True">     173:</span> <span class="k">   results of consecutive calls is valid.</span>
<a name="174" /><span class="True">     174:</span> <span class="k"></span>
<a name="175" /><span class="True">     175:</span> <span class="k">   Fill info (if set) with information of the function used to get the time.</span>
<a name="176" /><span class="True">     176:</span> <span class="k"></span>
<a name="177" /><span class="True">     177:</span> <span class="k">   Return 0 on success, raise an exception and return -1 on error. */</span>
<a name="178" /><span class="True">     178:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_GetMonotonicClockWithInfo</span><span class="f">(</span>
<a name="179" /><span class="True">     179:</span>     <span class="b">_PyTime_t</span> <span class="f">*</span><span class="b">t</span><span class="f">,</span>
<a name="180" /><span class="True">     180:</span>     <span class="b">_Py_clock_info_t</span> <span class="f">*</span><span class="b">info</span><span class="f">)</span><span class="f">;</span>
<a name="181" /><span class="True">     181:</span> 
<a name="182" /><span class="True">     182:</span> 
<a name="183" /><span class="True">     183:</span> <span class="k">/* Initialize time.</span>
<a name="184" /><span class="True">     184:</span> <span class="k">   Return 0 on success, raise an exception and return -1 on error. */</span>
<a name="185" /><span class="True">     185:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_Init</span><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="186" /><span class="True">     186:</span> 
<a name="187" /><span class="True">     187:</span> <span class="k">/* Converts a timestamp to the Gregorian time, using the local time zone.</span>
<a name="188" /><span class="True">     188:</span> <span class="k">   Return 0 on success, raise an exception and return -1 on error. */</span>
<a name="189" /><span class="True">     189:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_localtime</span><span class="f">(</span><span class="b">time_t</span> <span class="b">t</span><span class="f">,</span> <span class="m">struct</span> <span class="b">tm</span> <span class="f">*</span><span class="b">tm</span><span class="f">)</span><span class="f">;</span>
<a name="190" /><span class="True">     190:</span> 
<a name="191" /><span class="True">     191:</span> <span class="k">/* Converts a timestamp to the Gregorian time, assuming UTC.</span>
<a name="192" /><span class="True">     192:</span> <span class="k">   Return 0 on success, raise an exception and return -1 on error. */</span>
<a name="193" /><span class="True">     193:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyTime_gmtime</span><span class="f">(</span><span class="b">time_t</span> <span class="b">t</span><span class="f">,</span> <span class="m">struct</span> <span class="b">tm</span> <span class="f">*</span><span class="b">tm</span><span class="f">)</span><span class="f">;</span>
<a name="194" /><span class="True">     194:</span> 
<a name="195" /><span class="False">     195:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="196" /><span class="False">     196:</span> <span class="f">}</span>
<a name="197" /><span class="True">     197:</span> <span class="f">#</span><span class="n">endif</span>
<a name="198" /><span class="True">     198:</span> 
<a name="199" /><span class="True">     199:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* Py_PYTIME_H */</span>
<a name="200" /><span class="True">     200:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* Py_LIMITED_API */</span>
<a name="201" /><span class="True">     201:</span> </pre>
  </body>
</html>
